/*
Launchy: Application Launcher
Copyright (C) 2007  Josh Karlin

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <QtGui>
#include <QUrl>
#include <QFile>
#include <QRegExp>
#include <QTextCodec>

#ifdef Q_WS_WIN
#include <windows.h>
#include <shlobj.h>
#include <tchar.h>

#endif
#include <iostream>
#include <fstream> // remove this
#include "aggregaty.h"

aggregatyPlugin* gAggregatyInstance = NULL;

void aggregatyPlugin::getID(uint* id)
{
	*id = HASH_aggregaty;
}

void aggregatyPlugin::getName(QString* str)
{
	*str = PLUGIN_NAME;
}

void aggregatyPlugin::init()
{
	if (gAggregatyInstance == NULL) gAggregatyInstance = this;
	lstSubscriptions.clear();
	QSettings* qSet = *settings;
	
	qSet->setValue("aggregaty/version", 1.0);

	int count = qSet->beginReadArray("aggregaty/subs");
	for(int i = 0; i < count; ++i) {
		qSet->setArrayIndex(i);
		FeedSubscription sub;
	
		sub.SetName(qSet->value("name").toString());
		sub.SetURL(qSet->value("url").toString());
		sub.SetInterval(qSet->value("interval").toInt());
		sub.SetUser(qSet->value("user").toString());
		sub.SetPasswd(qSet->value("passwd").toString());
		lstSubscriptions.push_back(sub);
	}
	qSet->endArray();

}



void aggregatyPlugin::getLabels(QList<InputData>* id)
{
}

void aggregatyPlugin::getResults(QList<InputData>* id, QList<CatItem>* results)
{
}



QString aggregatyPlugin::getIcon()
{
#ifdef Q_WS_WIN
	return qApp->applicationDirPath() + "/plugins/icons/rssfeeds.png";
#endif
}

void aggregatyPlugin::getCatalog(QList<CatItem>* items)
{
}

void aggregatyPlugin::launchItem(QList<InputData>* id, CatItem* item)
{
}

void aggregatyPlugin::doDialog(QWidget* parent, QWidget** newDlg) 
{
	if ( gui != NULL) return;
	gui = new Gui(parent);
	*newDlg = gui;
}

void aggregatyPlugin::endDialog(bool accept) 
{
	if (accept)
	{
		gui->writeOptions();
		init();
	}

	if (gui != NULL)
		delete gui;

	gui = NULL;
}

int aggregatyPlugin::msg(int msgId, void* wParam, void* lParam)
{


	QFile file("outfile.txt");
	if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
        return 0;
	}

	QTextStream out(&file);
	out << "DEBUG" << 49 << "\n";
	file.close();

	std::ofstream f_outputFile;
	f_outputFile.open("myfile.txt");
	f_outputFile << "Hello\n";
	f_outputFile.close();


	bool handled = false;
	switch (msgId)
	{		
		case MSG_INIT:
			init();
			handled = true;
			break;
		/*case MSG_GET_LABELS:
			getLabels((QList<InputData>*) wParam);
			handled = true;
			break;*/
		case MSG_GET_ID:
			getID((uint*) wParam);
			handled = true;
			break;
		case MSG_GET_NAME:
			getName((QString*) wParam);
			handled = true;
			break;
		/*case MSG_GET_RESULTS:
			getResults((QList<InputData>*) wParam, (QList<CatItem>*) lParam);
			handled = true;
			break;
		case MSG_GET_CATALOG:
			getCatalog((QList<CatItem>*) wParam);
			handled = true;
			break;
		case MSG_LAUNCH_ITEM:
			launchItem((QList<InputData>*) wParam, (CatItem*) lParam);
			handled = true;
			break;*/
		case MSG_HAS_DIALOG:
			// Set to true if you provide a gui
			handled = true;
			break;
		case MSG_DO_DIALOG:
			// This isn't called unless you return true to MSG_HAS_DIALOG
			doDialog((QWidget*) wParam, (QWidget**) lParam);
			break;
		case MSG_END_DIALOG:
			// This isn't called unless you return true to MSG_HAS_DIALOG
			endDialog((bool) wParam);
			break;

		default:
			break;
	}
		
	return handled;
}

Q_EXPORT_PLUGIN2(aggregaty, aggregatyPlugin) 
